﻿using System.Web;
using System.Web.Mvc;
using CodeSaude.Infrastructure.CrossCutting.IoC.Provider.Abstract;
using Ninject;

namespace CodeSaude.Infra.CrossCutting.IoC.Filter
{
    public class CustomAutenticacaoAttribute :  AuthorizeAttribute
    {
        [Inject]
        public IAutenticacaoProvider autenticacaoProvider { get; set; }

        private string msgErro;
        private string NomeUser = "visitante";
        private string grupoEscolhido;

        public CustomAutenticacaoAttribute(string grupo)
        {
            grupoEscolhido = grupo;
        }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!autenticacaoProvider.Autenticado)
            {
                msgErro = "Não foi possível autenticar o usuário!";
                return false;
            }
            else if (!string.IsNullOrEmpty(grupoEscolhido) && autenticacaoProvider.UsuarioAutenticado.Grupo != grupoEscolhido)
            {
                //msgErro = Microsoft.JScript.GlobalObject.unescape(msgErro); //  = HttpUtility.UrlDecode(msgErro.Replace("+", "%2b"), Encoding.Default);
                return false;
            }
            NomeUser = autenticacaoProvider.UsuarioAutenticado.Nome;
            return true;
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            base.HandleUnauthorizedRequest(filterContext);
            filterContext.RequestContext.HttpContext.Response.Redirect("/Autenticacao/" + ((!autenticacaoProvider.Autenticado) ? "Login" : "AcessoNegado"), true);
        }
    }
}